import VuiClipboardCommandUtils from './components/clipboard-command';
import VuiClipboardEventUtils from './components/clipboard-event';
import VuiClipboardNavigatorUtils from './components/clipboard-navigator';

/*
 * Vui剪切板工具
 * @Author: Jevon
 * @Date: 2021-12-15 18:23:03
 */
const VuiClipboard = (function() {
  /**
   * 向剪切板写入文本
   * @param {*} data
   * @param {*} evt
   * @return {*}
   */
  function writeText(data, evt) {
    let result = null;
    if (!evt && VuiClipboardNavigatorUtils.check()) {
      result = VuiClipboardNavigatorUtils.writeText(data);
    } else if (VuiClipboardEventUtils.check()) {
      result = VuiClipboardEventUtils.writeText(data, evt);
    } else {
      VuiClipboardCommandUtils.writeText(data);
    }
    if (result) {
      result.catch(err => {
        console.error(err);
        VuiClipboardCommandUtils.writeText(data);
      });
    }
  }
  /**
   * 读取剪切板中的文本
   * @param {*} evt
   * @return {*}
   */
  function readText(evt) {
    let result = null;
    if (!evt && VuiClipboardNavigatorUtils.check()) {
      result = VuiClipboardNavigatorUtils.readText();
    } else if (VuiClipboardEventUtils.check()) {
      result = VuiClipboardEventUtils.readText(evt);
    } else {
      VuiClipboardCommandUtils.readText();
    }
    if (result) {
      result.catch(err => {
        console.error(err);
        return VuiClipboardCommandUtils.readText();
      });
    }
    return result;
  }
  /**
   * 向剪切板写入内容
   *
   * @param {VuiClipboardDataItem} item
   * @param {*} evt
   * @return {*}
   */
  function write(item, evt) {
    let result = null;
    if (!evt && VuiClipboardNavigatorUtils.check()) {
      result = VuiClipboardNavigatorUtils.write(item);
    } else if (VuiClipboardEventUtils.check()) {
      result = VuiClipboardEventUtils.write(item, evt);
    } else {
      VuiClipboardCommandUtils.write(item);
    }
    if (result) {
      result.catch(err => {
        console.error(err);
        VuiClipboardCommandUtils.write(item);
      });
    }
    return result;
  }
  /**
   * 根据类型读取剪切板
   * @param {*} format
   * @return {*}
   */
  function read(format, evt) {
    let result = null;
    if (!evt && VuiClipboardNavigatorUtils.check()) {
      result = VuiClipboardNavigatorUtils.read(format);
    } else if (VuiClipboardEventUtils.check()) {
      result = VuiClipboardEventUtils.read(format, evt);
    } else {
      VuiClipboardCommandUtils.read(format);
    }
    if (result) {
      result.catch(err => {
        console.error(err);
        return VuiClipboardCommandUtils.read(format);
      });
    }
    return result;
  }

  return {
    writeText,
    readText,
    write,
    read
  };
})();
export default VuiClipboard;
